/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op;

import core.QuebraString;
import java.util.Map;
import java.util.Date;

/**
 *
 * @author Jônatas
 */
public class QuebraStringClaro implements QuebraString {

    public EntradaAbstrata quebraString(Map<String, Object> parametersMap) throws Exception {

        EntradaAbstrata entrada = null;

        String[] dados = (String[]) parametersMap.get("dados");

        String strOrigem = dados[0].trim(); // origem

        if (strOrigem == null || strOrigem.isEmpty()) {
            return null;
        }

        String tipo = dados[1].trim(); // tipo
        String strData = dados[2].trim(); //data
        String hora = dados[3].trim(); //hora
        String descricao = dados[4]; //descricao
        String strDestino = dados[5].trim(); // destino
        String duracao = dados[6].trim(); // duracao
        String valor = dados[9].trim(); // valor
        String plano = dados[13].trim(); // plano

        boolean ehLigacao = duracao.matches("[0-9]{2}:[0-9]{2}:[0-9]{2}");
        boolean ehMensalidade = plano.toLowerCase().equals("mensalidades e pacotes promocionais");

        // eh ligacao
        if (ehLigacao || ehMensalidade) {
            entrada = new Ligacao();
        } else {
            entrada = new OutrasCobrancas();
        }

        /*
         * origem
         */
        strOrigem = "0" + strOrigem;
        strOrigem = strOrigem.replace(" ", "");
        strOrigem = strOrigem.replace("-", "");

        Telefone origem = new Telefone(strOrigem);
        entrada.setNumeroDeOrigem(origem);

        /*
         * tipo
         */
        if (ehMensalidade) {
            entrada.setTipoDeLigacao(tipo);
        } else {
            entrada.setTipoDeLigacao(plano);
        }

        /*
         * data e hora
         */
        if (ehLigacao) {
            hora = dados[3];
            Date data = EntradaAbstrata.criaDate(strData, hora);
            entrada.setDataOrigemLigacao(data);
        }

        /*
         * descricao
         */
        entrada.setLocalDaLigacao(descricao);


        /*
         * destino
         */
        Telefone destino = null;
        if (strDestino.matches("[0-9]{10}")) {
            destino = new Telefone("0" + strDestino);
        } else {
            destino = new Telefone(strDestino, true);
        }
        entrada.setDestino(destino);

        /*
         * duracao
         */
        if (ehLigacao) {
            Integer tempo = EntradaAbstrata.getDuracaoLigacaoSegundos(duracao);
            entrada.setDuracaoLigacaoSegundos(tempo);
        } else {
            entrada.setDuracaoLigacaoSegundos(new Integer(60));
        }

        /*
         * valor
         */
        Double custo = new Double(valor.replace(',', '.'));
        entrada.setCusto(custo);

        /*
         * plano
         */
        if (!ehMensalidade) {
            entrada.setPlanoLigacao(plano);
        } else {
            entrada.setPlanoLigacao("");
        }

        return entrada;
    }
}
